11 research outputs found

    Exploiting Program Schemata in a Prolog Tutoring System

    No full text
    After their beginnings in computer-aided instruction, automated tutors have re-emerged as intelligent tutoring systems. These intelligent tutors have obtained considerable success by using results from cognitive psychology and artificial intelligence to permit non-traditional instruction which is tailored to their individual students. The success of these automated tutors is due to their precise understanding and modeling of both the student and the domain being taught. A common measure of the robustness of an automated tutor is the size of the domain that it can understand. The schema-based Prolog tutor described in this dissertation is capable of recognizing a larger class of programs than existing Prolog tutors. By using powerful generalized transformations, our Prolog tutor can generate this class of programs from a very small set of normal form programs. Thus, our Prolog tutor recognizes a larger class of programs using fewer normal form programs than existing Prolog tutors. One o..

    Exploiting Logic Program Schemata to Teach Recursive Programming

    No full text
    Abstract. Recursion is a complex concept that most novice logic programmers have difficulty grasping. Problems associated with recursion are avoided in imperative languages where iteration is provided as an alternative to recursion. Although difficult to learn, recursion is very easy to use once it is understood. In fact, many problems that have straightforward recursive solutions have very sophisticated iterative solutions. Many of the difficulties associated with learning recursion can be overcome by incorporating conditional recursion (i.e., a structured recursive equivalent to the WHILE loop) into logic programming languages. Two popular instructional techniques are collaborative learning and situated learning. The underlying claim of the situated cognition movement is the desire to enculturate the student into the domain of the teacher by involving the student in a series of authentic activities which are designed to incrementally improve the skills of the student. In the domain of computer programming, collaboration is an authentic activity. In this paper, we present logic program templates and schemata which add conditional recursion to logic programming languages and enable collaborative logic programming. Conditional recursion also provides a bridge to higher-order programming. Higher-order programming is the essence of abstraction in problem solving. Thus, in addition to aiding its students in acquiring the knowledge of recursion, conditional recursion also promotes abstract problem solving skills. We have successfully employed this schema-based approach to teaching recursion in several declarative programming languages with much success over the past four years.

    Constructing Contracts: Making Discrete Mathematics Relevant to Beginning Programmers

    No full text
    Although computer scientists understand the importance of discrete mathematics to the foundations of their field, computer science (CS) students do not always see the relevance. Thus, it is important to find a way to show students its relevance. The concept of program correctness is generally taught as an activity independent of the programming process, hence many CS students perceive it as unnecessary, and even irrelevant. The concept of contracts, on the other hand, is generally taught as an integral part of the programming process. Most CS students have little difficulty understanding the need to establish contracts via preconditions and postconditions. In order to improve teaching program correctness concepts, we implemented ProVIDE, an enhanced integrated development environment (IDE). ProVIDE assists student programmers in contract construction. Rather than asking for both a precondition and postcondition for each of the student’s methods, ProVIDE asks the student to simply supply a postcondition. ProVIDE then helps the student construct the appropriate precondition by leading him or her through an axiomatic proof of the method’s correctness. Thus, the proof of of the method’s correctness is a side-effect of the student’s need to construct an appropriate precondition

    Extensible Logic Program Schemata

    No full text
    . Schema-based transformational systems maintain a library of logic program schemata which capture large classes of logic programs. One of the shortcomings of schema-based transformation approaches is their reliance on a large (possibly incomplete) set of logic program schemata that is required in order to capture all of the minor syntactic differences between semantically similar logic programs. By defining a set of extensible logic program schemata and an associated set of logic program transformations, it is possible to reduce the size of the schema library while maintaining the robustness of the transformational system. In our transformational system, we have defined a set of extensible logic program schemata in #Prolog. Because #Prolog is a higher-order logic programming language, it can be used as the representation language for both the logic programs and the extensible logic program schemata. In addition to the instantiation of predicate variables, extensible logic program sc..

    Representing Logic Program Schemata in lambdaProlog

    No full text
    .Program schemata and programming techniques provide a mechanism for representing the essential characteristics of logic programs. By abstracting out common recursive control flow patterns, program schemata capture large classes of logic programs. Programming techniques represent common program components. By instantiating portions of program schemata with programming techniques, it is possible to generate arbitrary logic programs. In order to represent program schemata and programming techniques for any programming language, it is desirable to use a higher-order programming language as the representation language. #Prolog is a higher-order logic programming language that extends Prolog by incorporating higher-order unification and #-terms, making it an ideal logic programming language for representing logic program schemata and programming techniques. Because #Prolog program schemata and programming techniques can be represented in #Prolog, there is no need for the creation of an a..

    Ancient Egyptian numbers

    No full text

    Studying program correctness in ProVIDE

    No full text
    corecore